package com.example.date;

import org.junit.Test;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 *
 * JDK 8 之前日期和时间的API测试
 *
 * @author readpage
 * @create 2022-09-06 20:57
 */
public class DateTest {

    //1.System类中的currentTimeMillis()
    @Test
    public void test() {
        long time = System.currentTimeMillis();
        // 返回当前时间与1970年1月1日0时0分0秒之间以毫秒为单位的时间差。
        // 称为时间戳
        System.out.println(time);
    }

    /**
     * java.util.Date类
     *      |---java.sql.Date类
     *
     * 1.两个构造器的使用
     *
     *
     * 2.两个方法的使用
     *  >toString(): 显示当前的年、月、日、时、分、秒
     *  .getTime(): 获取当前Date对象对应的毫秒数。 (时间戳)
     *
     * 3.java.sql.Date对应着数据库中的日期类型的变量
     *
     */
    @Test
    public void test2() {
        //构造器一: Date(): 创建一个对应当前时间的Date对象
        Date date = new Date();
        System.out.println(date.toString()); // Tue Sep 06 21:14:30 CST 2022
        System.out.println(date.getTime()); // 1662470490271
        // 构造器二: 创建指定毫秒数的Date对象
        Date date2 = new Date(1662470490271L);
        System.out.println(date2.toString());
    }

    /**
     * SimpleDateFormat的使用: SimpleDateFormat对日期Date类的格式化和解析
     *
     * 1.两个操作:
     * 1.1格式化 日期 --> 字符串
     * 2.2解析: 格式化的逆过程,字符串 ---> 日期
     *
     * 2.SimpleDateFormat的实例化
     */

    @Test
    public void testSimpleDateFormat() throws ParseException {
        // 实例化SimpleDateFormat
        SimpleDateFormat sdf = new SimpleDateFormat();

        //格式化: 日期 ---> 字符串
        Date date = new Date();
//        System.out.println(date);
        String format = sdf.format(date);
        System.out.println(format);

        //解析: 格式化的逆过程, 字符串 ---> 日期
        String str = "22-9-8 下午10:18";
        Date date1 = sdf.parse(str);
        System.out.println(date1);


        //***************按照指定的方式格式化和解析: 调用带参的构造器****************
        SimpleDateFormat sdf2 = new SimpleDateFormat("YYYY-MM-dd HH:mm:ss");
        //格式化
        String format2 = sdf2.format(date);
        System.out.println(format2);  //2022-09-08 22:21:16
        //解析:要求字符串必须是符合SimpleDateFormat识别的格式(通过构造器参数体体现)
        Date date2 = sdf2.parse("2022-09-08 22:21:16");
        System.out.println(date2);
    }

    /**
     * 练习一: 字符串"2020-09-08"转化为java.sql.Date
     *
     * 练习二: "三天打鱼两天晒网 1990-01-01 xxxx-xx-xx 打鱼? 晒网?
     * 举例: 2020-09-08 ? 总天数
     *
     * 总天数 % 5 == 1,2,3 : // 打鱼
     * 总天数 % 5 = 4,0  // 晒网
     *
     * 总天数的计算?
     * 方式一: (date2.getTime - date1.getTime()) / (1000 * 60 * 60 * 24) + 1
     * 方式二: 1990-01-01 ---> 2019-12-31 + 2020-01-01 --> 2020-09-08
     */

    @Test
    public void testExer() throws ParseException {
        String birth = "2020-09-08";
        SimpleDateFormat sdf2 = new SimpleDateFormat("YYYY-MM-dd");
        Date date = sdf2.parse(birth);
//        System.out.println(date);
        java.sql.Date birthDate = new java.sql.Date(date.getTime());
        System.out.println(birthDate);
    }

}
